package main

import (
    "fmt"
)

func solution(numbers []string) int {
    // dp[0]表示当前和为偶数的组合数，dp[1]表示当前和为奇数的组合数
    dp := [2]int{1, 0} // 初始状态：和为0（偶数）有1种方式

    for _, numStr := range numbers {
        evenCount, oddCount := 0, 0
        for _, ch := range numStr {
            digit := int(ch - '0')
            if digit%2 == 0 {
                evenCount++
            } else {
                oddCount++
            }
        }

        // 计算新的状态
        newDp := [2]int{}
        newDp[0] = dp[0]*evenCount + dp[1]*oddCount
        newDp[1] = dp[0]*oddCount + dp[1]*evenCount
        dp = newDp
    }

    return dp[0]
}

func main() {
    fmt.Println(solution([]string{"123", "456", "789"}) == 14)    // true
    fmt.Println(solution([]string{"123456789"}) == 4)             // true
    fmt.Println(solution([]string{"14329", "7568"}) == 10)        // true
}